The technology described herein relates to data processing systems and in particular to a method of and apparatus for storing data in memory in data processing systems, and in particular to such a method and apparatus for use to store texture data and frame buffer data in computer graphics processing systems.
As part of graphics processing, it is common to perform so-called “texture mapping”, i.e. to generate colours (or other data) for sampling positions of the render output, such as an output frame for display, by applying so-called textures or texture data to the surfaces to be rendered. For example, surface detail on objects may be generated by applying a pre-defined “texture” to a set of primitives representing the object. Such textures are typically provided as a stored array of texture elements or “texels”, each representing given texture data (such as colour, luminance, and/or light/shadow, etc., values), with the texels then being mapped on to the corresponding elements, such as (and, indeed, typically) a set of sampling positions, for the render output being generated. The stored arrays of texture elements (data) are typically referred to “texture maps”.
The use of textures and texture mapping can provide higher image quality, but has a number of drawbacks. In particular, the storage of the texture data and accessing it in use can place, e.g. high storage and bandwidth requirements on a graphics processing device (or conversely lead to a loss in performance where such requirements are not met). This is particularly significant for mobile (portable) devices that perform graphics processing, as such devices are inherently limited in their, e.g., storage, bandwidth and power resources and capabilities.
It is known therefore to try to store such texture data in a “compressed” form so as to try to reduce, e.g., the storage and bandwidth burden that may be imposed on a device.
A further consideration when storing texture data (whether compressed or not) for use in graphics processing is that typically the graphics processing system will need to be able to access the stored texture data in a random access fashion (as it will not be known in advance which part or parts of the texture map will be required at any particular time). This places a further constraint on the storage of the texture data, as it is accordingly desirable to be able to store the texture data in a manner that is suitable for (and efficient for) random access to the stored data.
The Applicants have previously proposed in their U.S. Pat. Nos. 8,542,939B2, 9,014,496B2, 8,990,518B2 and 9,116,790 an improved arrangement for storing data, such as texture data for use in graphics processing, in memory. In this arrangement, an array of data, such as an array of texture data, is stored by dividing the array of data into a plurality of blocks, dividing each respective block of the data array into a plurality of sub-blocks, storing data representing each respective sub-block of data array in memory, and storing, for each respective block that the data array has been divided into, a header data block that contains data relating to and/or for the set of sub-blocks for the block of data array that the header data block relates to.
Notwithstanding the improved arrangements described in the Applicant's earlier US patents, the Applicants believe that there remains scope for improved arrangements for storing data, such as texture data for use in graphics processing, in memory.
Like reference numerals are used for like features throughout the drawings, where appropriate.